iT邦幫忙

2022 iThome 鐵人賽

2
自我挑戰組

資料庫新手入門--以PostgreSQL為例系列 第 30

Day 30 版本控制 (Git + Flyway)

  • 分享至 

  • xImage
  •  

版本控制在現今已經是相當普及的東西 (一項技能?),不過程式開發者有可能只有版控程式碼而沒有版控資料庫操作,或者後端框架也越來越多有 Migration 的功能能夠版本控制,不過結尾日 Day 30 來講一個不需要框架就能使用的資料庫版控的工具 Flyway。

資料庫操作目前有什麼淺在風險?

  1. 沒有相關SQL版本控制。
  2. 手動操作失誤風險。
  3. 許多使用者可能有太多生產環境的操作權限。

Solution

  • 使用 Flyway
  • 支援SQL Server, Postgres, MySQL, Oracle …等等主流資料庫
  • 使用 Migrations 作為版控機制

Flyway特色

  1. 簡單易學,這也是為什麼Flyway很受歡迎。
  2. 專注於資料庫版控

好處

  • 可以知道誰做了什麼改變、他們是如何做的以及他們何時做的
  • 減少生產環境使用者權限
  • 更容易本機端佈署
  • 執行更快速
  • 更可靠,降低人為失誤風險

下載Flyway Desktop

可以到 Flyway 官方網站下載 Flyway Desktop 也包含了 Flyway Command Line,我們將使用免費版本,不過必須要註冊一下才可以使用。(不用輸入信用卡)

建立 Flyway Project

我們一開始要NewProject建立出一個文件,這個文件將是Flyway版本控制的內容,指定Project location,這個路徑會是之後下Git的路徑,專案建出的時候Flyway也會建立出.gitignore檔案。

https://ithelp.ithome.com.tw/upload/images/20221022/20129430bVdlM9lmv7.png

Manage target databases

接著輸入要版控的資料庫連線資訊,我以本機為例,輸入資料庫名稱、Schemas等完成配置。

https://ithelp.ithome.com.tw/upload/images/20221022/20129430Q5e1JTqIeJ.png

首次設定要設置BaseLine

  1. 點擊 Advanced settings
  2. 點擊 Add parameters
  3. 選擇 baselineOnMigrate,Enter variable 輸入 = true。

完成以上步驟,Flyway才知道從哪開始版控。

Add migration / Run migrate

接著要開始進入版本控制階段,點選Add migration按鈕,版本會自動帶好(序號+日期),要輸入描述與執行內容,最後Run migrate,大功告成。

CREATE TABLE employees (
    emp_no      INT             NOT NULL,  
    birth_date  DATE            NOT NULL,
    first_name  VARCHAR(14)     NOT NULL,
    last_name   VARCHAR(16)     NOT NULL,
    hire_date   DATE            NOT NULL,
    PRIMARY KEY (emp_no)                 
);

後續

接著後續可以使用Git推到Github或是Gitea,更多資料庫版控也推薦 Sponge大大的鐵人賽系列文章 : 資料庫也有版本控制

系列結語與心得

完成的時間比預期還要久上不少,雖然美中不足,但還是很開心完成了一件對我而言有意義的事情,這個系列還能寫到30天必須感謝許多人,職場前輩的提點、家人的支持,以及W.H.大大給我的鼓勵,新手入門系列撰寫的過程中不只是複習資料庫,也學習到了一些實務上較少運用的內容,雖然收穫許多,但仍有許多資料庫主題尚未提及,之後有機會的話,我們 Medium 再見,感謝各位大大。


上一篇
Day 29 遞迴查詢 CTE
系列文
資料庫新手入門--以PostgreSQL為例30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
W.H.
iT邦新手 1 級 ‧ 2022-10-23 14:07:57

恭喜完賽!!/images/emoticon/emoticon42.gif
哈哈,我被cue了,其實我也是菜鳥一隻,我的頭像就是一隻鳥:貓頭鷹,所以要說「菜鴞」嗎?

偷偷(?)告訴你,我之前也犯蠢過,才剛註冊進來iT邦幫忙3天,我為了試驗如何po文,就把一張圖(已經是畫家去世超過70年的公版畫圖像,我在po文裡有說明)+「test」文字,po在「技術文章區」(雖然那時我有懷疑這算「技術文章」嗎?但找不到其它可放的區域~),然後又賺了2點,點數變成8點,瀏覽數也不少。

看著不斷上升的瀏覽數,我懷著欣喜的心情,關機ZZZ了⋯⋯

第二天我一起來,就趕快打開電腦,直奔本網站,結果不但在技術文章區看不到我的「文章」,連點數都變成-40,我沒向站方詢問(因為不好意思~),開始不斷爬文,得到一個結論:我的「文章」被檢舉,然後被撤下,點數自動扣50點⋯⋯

我超級受打擊的。

為了紀念(?)自己的犯蠢,我把W.H.(conteuse)這個帳號刪除,也把「點數-40」封存起來;然後,用同樣的頭像(反正是我自己畫的) + 同樣的暱稱「W.H.」+ 帳號「understood」(就是「瞭了」)再申請一個帳號,重新註冊。

(用放大鏡搜尋「W.H.」邦友,會看到3個「W.H.」。3個都是我!頭像都是自繪,第1個W.H.捨棄不用,是因為我不想用那個頭像+帳號,就直接刪除了,結果還是找得到,雖然線索是我給的啦,但是真的不能小看「數位刺青」!)

經過這次對新手的震撼(?)教育,我不敢再多發文,不過還是喜歡在這個網站逛逛,覺得這裡喜歡幫助別人的老手和文章很多,當然也有小白(但我要為某些小白說句話,有時小白根本不知道自己是小白啊~)。總之,每天上來逛逛成了日常定番,然後有天在「技術問答區」看到你的文章(我還記得是Day 17),不知為何,覺得非要鼓勵你一下不可,然後就持續看你的文啦,有時留言,讚聲一下,也獲得不少關於資料庫的知識,我也要謝謝你哩。

今年我本來想參加鐵人賽,但因為另有要務(本以為可以齊頭並進,但發現不可能),就先在這裡觀摩見習啦。我應該會參加明年(2023)的鐵人賽(說「應該」,是因為有時會有「不應該」的事情發生~),希望以「電玩小說」或「科幻小說」參加「自我挑戰組」,兩個故事的梗概都有了,就等著具體化&細節化了。

哈哈,不好意思,佔你的版寫了落落長的心路歷程(?),再次恭喜你完賽,雖然沒拿到那張鐵人鍊成證明,但寫好寫滿30天的你,已經不需要那張證明了。

只是,需要≠想要,我不需要,但想要(至少)一張鐵人鍊成證明,如果你也是,那明年見囉。

我要留言

立即登入留言